home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
C64
/
R-Shows
/
(c)sds.d64
/
moving sprite
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2007-02-04
|
15KB
|
175 lines
0 REM - WON'T WORK WITH BUSCARD 'ON'
1 GOTO 1000
10 REM :::::: ZAP!
11 A=256: B=2049: C=1003
12 IF PEEK(B+2) +A*PEEK(B+3)>=C THEN 15
13 B=PEEK(B)+A*PEEK(B+1): ON ABS(B<>0) GOTO 12:END
14 A=256:B=PEEK(251)+A*PEEK(252)
15 IF PEEK(B+1)=0 THEN END
16 PRINT CHR$(147)PEEK (B+2)+A*PEEK(B+3):PRINT "GOTO 14"
17 POKE 251,B-INT(B/A)*A:POKE 252,B/A
18 POKE 631,19:POKE632,13:POKE633,13:POKE198,3:END
20 REM ... GRAPHICS
21 POKE 53265,59
22 POKE 53272,29
23 POKE 56576,198
24 RETURN
30 REM ... TEXT
31 POKE 53265,27
32 POKE 53272,21
33 POKE 56576,199
34 RETURN
40 REM :::: COLOURS
41 FOR I=17408 TO 18407
42 POKE I,C
43 NEXT
44 RETURN
50 REM ::::::: PAINT BACKGROUND
51 FOR I = 24576 TO 32575
52 POKE I,0
53 NEXT I
54 RETURN
60 REM ::::::: FIND A POINT
61 ROW = INT(Y/8)
62 COL = INT(X/8)
63 LINE = Y AND 7
64 BIT = 7-(XAND7)
65 BYTE = 24576 + ROW*320 + COL*8 + LINE
66 CBYTE = 17408 + ROW * 40 + COL
67 RETURN
70 REM ::::::: PLOT A POINT
71 GOSUB 60
72 POKE BYTE,PEEK(BYTE) OR 2^BIT
73 POKE CBYTE,C
74 RETURN
80 REM ::::: PLOT A LINE
81 DX = X2 - X1: DY = Y2 - Y1
82 L=ABS(DX):IF ABS(DY)>L THEN L=ABS(DY)
83 IF L>0 THEN XI = DX/L: YI = DY/L
84 X = X1+.5:Y = Y1+.5
85 FOR I = 0 TO L
86 GOSUB 70: REM PLOT POINT
87 X=X+XI:Y=Y+YI
88 NEXT I
89 RETURN
90 REM ::::: PAINT A SHAPE
91 PC=PC+ABS(PC=0):FOR X=X0 TO X0+W:FL$="F":PR=0
92 FOR YC=Y0TOY0+H:Y=YC:GOSUB60
93 ON ABS((PEEK(BYTE)AND 2^BIT)<>0) GOTO 97:IF PR=0 THEN 96
94 PR=0:IF FL$="F"THEN Y1=YC:FL$="T":GOTO 96
95 GOSUB 99:FL$="F"
96 NEXT YC:GOTO 98
97 PR=1:NEXT YC:IF FL$="T"THEN GOSUB 99
98 NEXT X:RETURN
99 FOR Y=Y1TOYC-1:ON ABS(RND(1)<PC)GOSUB 70:NEXT Y: RETURN
100 REM ::::: SAVE PICTURE
101 INPUT "ENTER FILE NAME";FILE$
102 INPUT "ENTER 8 FOR DISK, OR 1 FOR CASSETTE"; DE
103 SYS 57812 FILE$ + ".PIC", DE
104 POKE 174,64:POKE 175,127:POKE 193,0:POKE 194,96
105 SYS 62954
106 SYS 57812 FILE$ + ".COL", DE
107 POKE 174,232: POKE 175,71: POKE193,0: POKE 194,68
108 SYS 62954: END
110 REM ::::: DRAW A SHAPE
111 FOR J = 0 TO NL
112 E1 = L%(0,J): E2 = L%(1,J)
113 X1 = E%(0,E1) + X0: Y1 = E%(1,E1) + Y0
114 X2 = E%(0,E2) + X0: Y2 = E%(1,E2) + Y0
115 GOSUB 80
116 NEXT J
117 RETURN
120 REM ::::: DEFINE SPRITE SP
121 FOR I = 0 TO 62
122 READ A
123 POKE 16384 + 64*SP+I,A
124 NEXT I
125 POKE 18424 + SP,SP
126 RETURN
130 REM ::::: TURN ON SPRITE SP
131 POKE 53269, PEEK(53269)OR 2^SP
132 RETURN
140 REM ::::: TURN OFF SPRITE SP
141 POKE 53269,PEEK(53269)AND(255-2^SP)
142 RETURN
150 REM ::::: X EXPAND SPRITE SP
151 POKE 53277,PEEK(53277)OR2^SP
152 RETURN
160 REM ::::: X UNEXPAND SPRITE SP
161 POKE 53277,PEEK(53277)AND(255-2^SP)
170 REM ::::: Y EXPAND SPRITE SP
171 POKE 53271,PEEK(53271)OR 2^SP
172 RETURN
180 REM ::::: Y UNEXPAND SPRITE SP
181 POKE 53271,PEEK(53271)AND(255-2^SP)
182 RETURN
190 REM :: SPRITE SP PRIORITY OVER SHAPE
191 POKE 53275,PEEK(53275)AND(255-2^SP)
192 RETURN
200 REM :: SHAPE PRIORITY OVER SPRITE SP
201 POKE 53275,PEEK(53275)OR 2^SP
202 RETURN
210 REM ::: SET SPRITE SP TO COLOUR C
211 POKE 53287 + SP,C
212 RETURN
220 REM :: PLACE SPRITE SP AT X,Y
221 XX=X+24:YY=Y+50:Z%=XX/256
222 V=XX-Z%*256:W=53248+SP*2
223 WW=53264
224 PR=ABS((PEEK(WW)AND 2^SP)<>0)
225 VV=PEEK(WW)AND(255-2^SP)OR(2^SP*Z%)
226 IF PR<>Z%THEN GOSUB140
227 POKE W,V:POKEWW,VV: GOSUB 130
228 POKE 53249+SP*2,YY
229 RETURN
230 REM :: MOVE SPRITE FROM X1,Y1 TO X2,Y2
231 DX=X2-X1:DY=Y2-Y1
232 L=ABS(DX):IFABS(DY)>LTHENL=ABS(DY)
233 IF L>0 THEN XI=DX/L:YI=DY/L
234 X=X1+.5:Y=Y1+.5:SD=SD+ABS(SD=0)
235 FOR I=0TOLSTEPSD
236 GOSUB 220
237 X=X+XI*SD:Y=Y+YI*SD
238 NEXT I
239 RETURN
1000 REM :::::
1001 REM MAIN ROUTINE
1002 REM :::::
1010 GOSUB 20
1100 REM ::::: SUN SPRITE
1110 SP =0:GOSUB 120
1120 GOSUB 130
1130 GOSUB 150
1140 GOSUB 170
1150 GOSUB 200
1160 C = 7:GOSUB 210
1170 X1=0:Y1=10:X2=319:Y2=10:SD=5
1180 GOSUB 230: GOTO 1180
2500 REM ::::: SUN SPRITE DATA
2510 DATA 0, 0, 0
2520 DATA 0, 0, 0
2530 DATA 1,255,128
2540 DATA 7,255,224
2550 DATA 15,255,240
2560 DATA 31,255,248
2570 DATA 63,255,252
2580 DATA 127,255,254
2590 DATA 255,255,255
2600 DATA 255,255,255
2610 DATA 255,255,255
2620 DATA 255,255,255
2630 DATA 255,255,255
2640 DATA 127,255,254
2650 DATA 63,255,252
2660 DATA 31,255,248
2670 DATA 15,255,240
2680 DATA 7,255,224
2690 DATA 1,255,128
3000 DATA 0, 0, 0
3010 DATA 0, 0, 0
6000 GETA$
6010 IF A$=" " THEN 6030
6020 GOTO 6000
6030 GOSUB 30
6040 END